package com.google.android.apps.mytracks.clientes;

import com.google.android.apps.mytracks.content.Cliente;
import com.google.android.apps.mytracks.content.ClientesColumns;
import com.google.android.apps.mytracks.content.MyTracksProvider.DatabaseHelper;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;

import java.util.ArrayList;
import java.util.List;

public class ClienteDataSource {

  // Database fields
  private SQLiteDatabase database;
  private DatabaseHelper dbHelper;
  private String[] allColumns = ClientesColumns.COLUMNS;

  public ClienteDataSource(Context context) {
    dbHelper = new DatabaseHelper(context);
  }

  public void open() throws SQLException {
    database = dbHelper.getWritableDatabase();
  }

  public void close() {
    dbHelper.close();
  }

  public long createCliente(Cliente cliente) {
    ContentValues values = new ContentValues();
    values.put(ClientesColumns.NOMBRE, cliente.getNombre());
    values.put(ClientesColumns.DIRECCION, cliente.getDireccion());
    values.put(ClientesColumns.EMAIL, cliente.getEmail());
    long insertId = database.insert(ClientesColumns.TABLE_NAME, null, values);
    return insertId;
  }
  
  public Cliente getCliente(long clienteId) {
    String[] args = new String[] {String.valueOf(clienteId)};
    Cursor cursor = database.query(ClientesColumns.TABLE_NAME,
        allColumns, ClientesColumns._ID+"=?", args, null, null, null);
    cursor.moveToFirst();
    Cliente cliente = cursorToCliente(cursor);
    cursor.close();
    return cliente;
  }

  public void deleteCliente(Cliente cliente) {
    long id = cliente.getId();
    database.delete(ClientesColumns.TABLE_NAME, ClientesColumns._ID
        + " = " + id, null);
  }
  
  public void updateCliente(Cliente cliente) {
    
    long id = cliente.getId();
    ContentValues values = new ContentValues();
    values.put(ClientesColumns.NOMBRE, cliente.getNombre());
    values.put(ClientesColumns.DIRECCION, cliente.getDireccion());
    values.put(ClientesColumns.EMAIL, cliente.getEmail());
    String strFilter = "_id=" + id;
    database.update(ClientesColumns.TABLE_NAME, values, strFilter, null);
  }

  public List<Cliente> getAllclientes() {
    List<Cliente> clientes = new ArrayList<Cliente>();

    Cursor cursor = database.query(ClientesColumns.TABLE_NAME,
        allColumns, null, null, null, null, ClientesColumns.DEFAULT_SORT_ORDER);

    cursor.moveToFirst();
    while (!cursor.isAfterLast()) {
      Cliente cliente = cursorToCliente(cursor);
      clientes.add(cliente);
      cursor.moveToNext();
    }
    // make sure to close the cursor
    cursor.close();
    return clientes;
  }

  private Cliente cursorToCliente(Cursor cursor) {
    Cliente cliente = new Cliente();
    cliente.setId(cursor.getLong(0));
    cliente.setNombre(cursor.getString(1));
    cliente.setDireccion(cursor.getString(2));
    cliente.setEmail(cursor.getString(3));
    return cliente;
  }
} 